﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.IO;
using DO = DataObjects;
using DM = DataMapping;

namespace DataAccess
{
    public class CorretorDB
    {
        #region Metodos Publicos

        public static DO.Corretor GetItem(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Corretor corretor = (from c in dc.Corretors
                                        where c.IdCorretor == id
                                        select c).FirstOrDefault();

                return FillRecord(corretor);
            }
        }

        public static List<DO.Corretor> GetList()
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                List<DM.Corretor> corretorList = (from c in dc.Corretors
                                                  select c).ToList();

                List<DO.Corretor> corretorListReturn = new List<DO.Corretor>();
                foreach (DM.Corretor c in corretorList)
                    corretorListReturn.Add(FillRecord(c));

                return corretorListReturn;
            }
        }

        public static int Save(DO.Corretor corretor)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Corretor corretorDB = (from c in dc.Corretors
                                          where c.IdCorretor == corretor.Id
                                          select c).FirstOrDefault();

                if (corretorDB == null)
                {
                    corretorDB = new DM.Corretor();

                    corretorDB.NomeCompleto = corretor.NomeCompleto;
                    corretorDB.NomeSimples = corretor.NomeSimples;
                    corretorDB.Apelido = corretor.Apelido;
                    corretorDB.Logradouro = corretor.Logradouro;
                    corretorDB.Numero = corretor.Numero;
                    corretorDB.Complemento = corretor.Complemento;
                    corretorDB.Bairro = corretor.Bairro;
                    corretorDB.Cidade = corretor.Cidade;
                    corretorDB.Estado = corretor.Estado;
                    corretorDB.FoneFixo = corretor.FoneFixo;
                    corretorDB.Celular = corretor.Celular;
                    corretorDB.Email = corretor.Email;

                    dc.Corretors.InsertOnSubmit(corretorDB);
                }
                else
                {
                    corretorDB.IdCorretor = corretor.Id;
                    corretorDB.NomeCompleto = corretor.NomeCompleto;
                    corretorDB.NomeSimples = corretor.NomeSimples;
                    corretorDB.Apelido = corretor.Apelido;
                    corretorDB.Logradouro = corretor.Logradouro;
                    corretorDB.Numero = corretor.Numero;
                    corretorDB.Complemento = corretor.Complemento;
                    corretorDB.Bairro = corretor.Bairro;
                    corretorDB.Cidade = corretor.Cidade;
                    corretorDB.Estado = corretor.Estado;
                    corretorDB.FoneFixo = corretor.FoneFixo;
                    corretorDB.Celular = corretor.Celular;
                    corretorDB.Email = corretor.Email;
                }

                try
                {
                    dc.SubmitChanges();
                    return corretorDB.IdCorretor;
                }
                catch (Exception ex)
                {
                    string date = ((DateTime.Now).ToString()).Substring(0, 9);
                    date = date.Replace('/', '-');
                    string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                    string path = (String.Format("{0}{1}\\Problema Gravação_{2}.txt", @"", location, date));
                    StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                    valor.WriteLine("Erro ao salvar: " + corretorDB.NomeSimples);
                    valor.WriteLine(ex.Message);
                    valor.WriteLine("------------------------------------------------------");
                    valor.Close();

                    dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                    dc.SubmitChanges();

                    return -1;
                }
            }
        }

        public static bool Delete(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Corretor corretorDB = (from c in dc.Corretors
                                          where c.IdCorretor == id
                                          select c).FirstOrDefault();

                if (corretorDB != null)
                {
                    try
                    {
                        dc.Corretors.DeleteOnSubmit(corretorDB);
                        dc.SubmitChanges();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        string date = ((DateTime.Now).ToString()).Substring(0, 9);
                        date = date.Replace('/', '-');
                        string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                        string path = (String.Format("{0}{1}\\Problema Exclusão_{2}.txt", @"", location, date));
                        StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                        valor.WriteLine("Erro ao excluir:" + corretorDB.NomeSimples);
                        valor.WriteLine(ex.Message);
                        valor.WriteLine("------------------------------------------------------");
                        valor.Close();

                        dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                        dc.SubmitChanges();

                        return true;
                    }
                }
                else
                    return false;
            }
        }

        #endregion

        #region Metodos Privados

        private static DO.Corretor FillRecord(DM.Corretor corretorDB)
        {
            DO.Corretor corretor = new DO.Corretor();

            corretor.Id = corretorDB.IdCorretor;
            corretor.NomeCompleto = corretorDB.NomeCompleto;
            corretor.NomeSimples = corretorDB.NomeSimples;
            corretor.Apelido = corretorDB.Apelido;
            corretor.Logradouro = corretorDB.Logradouro;
            corretor.Numero = corretorDB.Numero;
            corretor.Complemento = corretorDB.Complemento;
            corretor.Bairro = corretorDB.Bairro;
            corretor.Estado = corretorDB.Estado;
            corretor.FoneFixo = corretorDB.FoneFixo;
            corretor.Celular = corretorDB.Celular;
            corretor.Email = corretorDB.Email;

            return corretor;
        }

        #endregion
    }
}
